#include "lmodel.h"
#include <QDebug>
LModel::LModel(int num):Model(num)
{
    edges=new QList<Edge>[num];
}

void LModel::addEdge(int start, int end, int length)
{
    QList<Edge>::iterator iter;
    for(iter=edges[start].begin();iter!=edges[start].end();iter++)
    {
        if((*iter).next==end)    //如果这条线已经存在了
        {
            return; //返回
        }
    }
    edges[start].append(Edge(start,end,length));
}

LModel::LModel(const LModel &another):Model(another)
{
    edges=new QList<Edge>[num];
    for(int i=0;i<num;i++)
        edges[i]=another.edges[i];
}

LModel::~LModel()
{
    delete[] edges;
}

void LModel::updateDistance()
{
    for(QList<Edge>::iterator iter=edges[current].begin();iter!=edges[current].end();iter++)  //遍历该点所有边
    {
      Edge edge=*iter;//获取当前访问的边
      if(distance[current]+edge.length<distance[edge.next])//如果经过当前点再到下一个点比之前的距离小了
      {
           distance[edge.next]=distance[current]+edge.length;//更新到达该点的距离
           int temp=path[edge.next].size();
           /*舍弃之前的路径*/
           for(int j=0;j<temp;j++)
               path[edge.next].pop_back();
           /*填补新路径*/
           temp=path[current].size();
           for(int j=0;j<temp;j++)
               path[edge.next].push_back(path[current][j]);
           path[edge.next].push_back(edge.next);
      }
   }
}

